import router from './router'
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth' // get token from cooki
// 导入进度条插件
import NProgress from 'nprogress'
import 'nprogress/nprogress.css' // 样式

// 导入 store
import store from '@/store'

// 定义白名单(不需要 token 也可以访问如：404， login)
const whiteList = ['/login', '/404']

// 前置导航守卫
router.beforeEach(async (to, from, next) => {
  /* console.log(to)
  console.log(from)
  console.log(to.path) */
  // 开启进度条
  NProgress.start()

  // 获取 token
  const token = getToken()

  // 判断 是否有 token
  if (token) {
    // 在前置导航守卫这里获取数据，先判断数据是否存在，若没有则调用方法发请求来获取数据
    if (!store.getters.userInfo.username) {
      const userinfo = await store.dispatch('user/getUserInfo')
      // 调用添加动态路由方法
      const newRoutes = await store.dispatch(
        'primission/setRoutes',
        userinfo.roles.menus
      )
      console.log(newRoutes)
      // addRoutes 方法：向路由对应中动态添加路由规则
      await router.addRoutes([
        ...newRoutes,
        { path: '*', redirect: '/404', hidden: true }
      ])
      next(to.path)
    }
    // 存在，则再判断是否要跳转登录页
    if (to.path === '/login') {
      // 是，不需跳转登录页，并给出提示
      Message.info('您已经登录过了，无需再次登录')
      NProgress.done()
      next({ path: '/' })
    } else {
      // 存在 token 且不是跳转登录页，则直接跳转
      next()
    }
  } else {
    // 没有token，则判断是否在白名单中  也可以使用 includes 方法
    if (whiteList.indexOf(to.path) !== -1) {
      // 在，说明访问无需 token ，直接跳转
      next()
    } else {
      /* // 判断是否是第一次进来
      if (from.path == '/') {
        next('/login')
      } else {
        // 不在，未登录则跳转登录页并给出提示
        Message.error('您还未登录，请先登录')
        // 跳转登录页是保存当前页面路径
        next(`/login?_redirect=${to.path}`)
      } */
      // 不在，未登录则跳转登录页并给出提示
      Message.error('您还未登录，请先登录')
      // 跳转登录页是保存当前页面路径
      next(`/login?_redirect=${to.path}`)
    }
  }
})

// 后置导航守卫
router.afterEach(() => {
  // 关闭进度条
  NProgress.done()
})
